package com.zkt.subject.domain.handler.subject;

import com.zkt.subject.common.enums.SubjectInfoTypeEnum;
import com.zkt.subject.domain.entity.SubjectUserScore;
import com.zkt.subject.infra.entity.SubjectInfoBO;
import com.zkt.subject.domain.entity.SubjectOptionBO;

/**
 * @author 赵开泰
 * @program jc-club
 * @date 2024/10/6
 * @description 题目策略类接口
 **/

public interface SubjectTypeHandler {
	
	/**
	 * 枚举身份的识别
	 *
	 * @return 题目类型的枚举
	 */
	SubjectInfoTypeEnum getHandlerType();
	
	/**
	 * 实际的题目的插入
	 *
	 * @param subjectInfoBO 题目数据
	 */
	void add(SubjectInfoBO subjectInfoBO);
	
	/**
	 * 实际的题目的删除
	 *
	 * @param subjectId 题目id
	 */
	void delete(Long subjectId);
	
	/**
	 * 实际的题目的更新
	 *
	 * @param subjectInfoBO 题目数据
	 */
	void update(SubjectInfoBO subjectInfoBO);
	
	/**
	 * 根据题目id查询对应题目信息
	 *
	 * @param subjectId 题目id
	 * @return 题目信息
	 */
	SubjectOptionBO queryBySubjectId(Long subjectId);
	
	/**
	 * 获取用户得分
	 *
	 * @param subjectInfoBO 用户答案信息
	 * @return 用户得分
	 */
	SubjectUserScore getUserScore(SubjectInfoBO subjectInfoBO);
}
